#include "ModuleConcat.h"

void ModuleConcat::init(QCVModuleHandlerInterface * parent)
{
	this->parent=parent;
	win=new QWidget();
  layout=new QVBoxLayout(win);
	vh_concat=new QCheckBox("Concatenation horizontale");

	sb_nbInputs=new QSpinBox(win);
	sb_nbInputs->setPrefix("inputs=");
	sb_nbInputs->setRange(2,4);	
	layout->addWidget(vh_concat);
	layout->addWidget(sb_nbInputs);
}
////////////////////////////////////////////////////////////////////////////////
void ModuleConcat::free()
{
	delete win;
}
////////////////////////////////////////////////////////////////////////////////
cv::Mat & ModuleConcat::process()
{
	out_matrice=matrice[0];
	
	if(!matrice[0].empty())
	{
		for(int i=1;i<sb_nbInputs->value();i++)
		{		
			if(vh_concat->isChecked())
			{	
				cv::Mat result;				
				if(!matrice[i].empty() && matrice[i].rows==matrice[0].rows)cv::hconcat(out_matrice,matrice[i],result);
				out_matrice=result.clone();
			}
			else
			{
				cv::Mat result;
				if(!matrice[i].empty() && matrice[i].cols==matrice[0].cols)cv::vconcat(out_matrice,matrice[i],result);
				out_matrice=result.clone();
			}
		}
	}

	return out_matrice;
}
////////////////////////////////////////////////////////////////////////////////
void ModuleConcat::setInput(int n,const cv::Mat & m)
{
	if(n<4)
	{
		matrice[n]=m.clone();
	}
}
////////////////////////////////////////////////////////////////////////////////
QWidget* ModuleConcat::widget()
{
	return win;
}
////////////////////////////////////////////////////////////////////////////////
QString ModuleConcat::getName()
{
	return tr("Concatener des matrices");
}
////////////////////////////////////////////////////////////////////////////////
int ModuleConcat::nbInputs()
{
	return sb_nbInputs->value();
}
////////////////////////////////////////////////////////////////////////////////
bool ModuleConcat::setParams(QString params)
{
	QStringList list_params=params.split(";");
		
	if(list_params.size()==2)
	{
		sb_nbInputs->setValue(list_params[0].toInt());
		vh_concat->setChecked(list_params[1].toInt());
		return true;
	}
	else
	{
		return false;
	}	
}
////////////////////////////////////////////////////////////////////////////////
QString ModuleConcat::getParams()
{
	return QString::number(sb_nbInputs->value())+tr(";")+
				 QString::number(vh_concat->isChecked());
}
////////////////////////////////////////////////////////////////////////////////
QCVModuleInterface * ModuleConcat::clone()
{
	return new ModuleConcat;
}
////////////////////////////////////////////////////////////////////////////////
QString ModuleConcat::help(int id)
{
	if(id==-2)
	{
		return tr("Permet de concatener plusieurs matrices, attention aux dimensions");
	}
	else if(id==-1)
	{
		return tr("image | vecteur | nombre");
	}
	else if(id==0)
	{
		return tr("image | vecteur | nombre");
	}
	else if(id==1)
	{
		return tr("image | vecteur | nombre");
	}
	else if(id==2)
	{
		return tr("image | vecteur | nombre");
	}
	else if(id==3)
	{
		return tr("image | vecteur | nombre");
	}
	else
	{
		return tr("erreur");
	}
}
////////////////////////////////////////////////////////////////////////////////
Q_EXPORT_PLUGIN2(ModuleConcat_plugin,ModuleConcat);  
